// step 2# 比较两个子树是否对称
bool compare(TreeNode* left, TreeNode* right) {
    // 首先排除空节点的情况
    if (left == NULL && right != NULL) return false;
    if (left != NULL && right == NULL) return false;
    if (left == NULL && right == NULL) return true;

    // 排除数值不同的情况
    if (left->val != right->val) return false;

    // 递归比较
    bool outside = compare(left->left, right->right);   // 外侧对比
    bool inside  = compare(left->right, right->left);   // 内侧对比
    return outside && inside;
}

// step 3# 判断树是否对称
bool isSymmetric(TreeNode* root) {
    if (root == NULL) return true;
    return compare(root->left, root->right);
}
